字段对象: Model类(表类)中的字段类所实例化出来的对象

获取字段对象的方法在《ORM-_meta的用法》章节中有提到

1.该章节中所用到的表

# models.py

from django.db import models


class Book(models.Model):
    title = models.CharField(max_length=15, verbose_name='书名')
    price = models.IntegerField(verbose_name='价格')
    publish = models.ForeignKey(to='Publish', verbose_name='出版社')
    author = models.ManyToManyField(to='Author', verbose_name='作者')

    def __str__(self):
        return self.title

    class Meta:
        verbose_name = "书籍"
        verbose_name_plural = verbose_name


class Publish(models.Model):
    title = models.CharField(max_length=15)

    def __str__(self):
        return self.title

    class Meta:
        verbose_name = '出版社'
        verbose_name_plural = verbose_name


class Author(models.Model):
    name = models.CharField(max_length=15)

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = '作者'
        verbose_name_plural = verbose_name


2. rel.to -> 获取该字段对象下所关联的模型表(即: 表类)

  • 语法: 字段对象.rel.to

  • rel.to 只作用于 一对一、一对多、多对多字段

# 获取字段对象
field_obj = Book._meta.get_field('publish')
# 获取该字段对象下所关联的模型表
publish_class = field_obj.rel.to  # <class 'app01.models.Publish'>
# 获取该模型表下的数据
publish_data = publish_class.objects.all()  # <QuerySet [<Publish: 东莞出版社>, <Publish: 广州出版社>]>

# 等同于

publish_data = field_obj.rel.to.objects.all()  # <QuerySet [<Publish: 东莞出版社>, <Publish: 广州出版社>]>